home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / KMAGV3.ZIP / ANIMEXAM.PAS < prev    next >
Pascal/Delphi Source File  |  1996-01-11  |  4KB  |  119 lines

  1. {XMSEXAM.PAS / EXAMPLE FOR SIMPLE ANIMATION }
  2. {WRITING BY THE KING IN 01/02/96            }
  3. Uses Crt,KmagUnit;
  4. Const
  5. Image: Array[1..24*5] of byte=(15,0,0,15,0,15,15,15,15,0,15,0,0,0,0,15,0,0,0,0,15,15,15,15,
  6.                               15,0,0,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
  7.                               15,15,15,15,0,15,15,15,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
  8.                               15,0,0,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
  9.                               15,0,0,15,0,15,15,15,15,0,15,15,15,15,0,15,15,15,15,0,15,15,15,15);
  10. Type
  11.  
  12.     {This Is The Virtual Screen Type}
  13.     VirtualScreenType = Array[0..64000] Of Byte;
  14.     VirtualScreenTypeP = ^VirtualScreenType;
  15.  
  16. Var
  17.     Virtual_Screen ,
  18.     Virtual_Screen1 : VirtualScreenTypeP; {Two Virtual Screens.}
  19.  
  20. {------------------------------------------------}
  21. {Put A Pixel On Any Kind Of Page.                }
  22. {------------------------------------------------}
  23.  
  24. Procedure PutPixel(X,Y:Integer;Col:Byte;Var Where);Assembler;
  25. Asm
  26.     Mov Ax,Word(Where+2) {Ax = Where[2](Segment)}
  27.     Mov Es,AX         {Es = Segment Of The Screen}
  28.     Mov Ax,Y          {Ax = Y}
  29.     Mov Bx,Ax         {Bx = Y}
  30.     Shl Ax,8          {Ax = Ax * 256}
  31.     Shl Bx,6          {Bx = Bx * 64}
  32.     Add Ax,Bx         {Ax = (256*64=320))}
  33.     Add Ax,x          {Ax = Vline + Hline = Offset}
  34.     Mov Di,Ax         {Di = Offset}
  35.     Mov Al,Col        {Al = Color}
  36.     StoSb             {[0A000h:Offset] = Color}
  37. End;
  38.  
  39. Procedure ShowVirtualScreen(Var VScreen);Assembler;
  40. Asm
  41.     Push Ds                 {Saving Ds}
  42.     Mov Ax,Word(Vscreen+2)  {Ax = Segment Vscreen}
  43.     Mov Ds,Ax               {Ds = Ax}
  44.     Mov Ax,0A000h           {Ax = Screen Segment}
  45.     Mov Es,AX               {Es = Ax}
  46.     Xor Di,Di               {Di = 0}
  47.     Xor Si,Si               {Si = 0}
  48.     Mov Cx,32000            {Cx = 32000}
  49.     Rep MovSw               {Move 32000*2 Bytes}
  50.                             {From [Ds:Si],[Es:Di]}
  51.     Pop Ds                  {Restore Ds}
  52. END;
  53. {-----------------------------------}
  54. {            Flip Pages             }
  55. {-----------------------------------}
  56. Procedure FlipScreens(Var Vfrom,Vto);Assembler;
  57. Asm
  58.    Push Ds               {Save Ds}
  59.    Mov Ax,Word(Vfrom+2)  {Ax = Segment Vfrom}
  60.    Mov Ds,Ax             {Ds = Ax}
  61.    Mov Ax,Word(Vto+2)    {Ax = Segment Vto}
  62.    MOv Es,AX             {Es = Ax}
  63.    Xor Di,Di             {Di = 0}
  64.    Xor Si,Si             {Si = 0}
  65.    Mov Cx,32000          {Cx = 32000}
  66.    Rep MovSw             {Move 32000*2 Bytes}
  67.                          {From [Ds:Si],[Es:Di]}
  68.    Pop Ds                {Restore Ds}
  69. END;
  70. {----------------}
  71. {Paint The BitMap}
  72. {----------------}
  73. Procedure Paint_BitMap(X,Y:Integer);
  74. Var
  75.     T,T1:Byte;
  76. Begin
  77.     For T:=0 To 4 Do
  78.     Begin
  79.         For T1:=1 To 24 Do
  80.         Begin
  81.             If Image[T*24+T1] <> 0 Then
  82.                 PutPixel(X+T1,Y+T,Image[T*24+T1],Virtual_Screen^);
  83.         End;
  84.     End;
  85. End;
  86.  
  87. Var X,Y:Integer;
  88.     T : Word;
  89.     Ran : Integer;
  90. Begin
  91.     New(Virtual_Screen);
  92.     New(Virtual_Screen1);
  93.     Randomize;
  94.     FillChar(Virtual_Screen^,64000,0);
  95.     For T:=1 To 65000 Do
  96.         PutPixel(Random(320),Random(200),Random(255),Virtual_Screen^);
  97.     FlipScreens(Virtual_Screen^,Virtual_Screen1^);
  98.     SetMode;
  99.     T:=0;
  100.     X:=160;
  101.     Y:=100;
  102.     Repeat
  103.         Ran := Random(3)-1;
  104.         If X + Ran >= 320-24 Then Ran := 0;
  105.         If X + Ran <= 0 Then Ran := 0;
  106.         X := X + Ran;
  107.         Ran := Random(3)-1;
  108.         If Y + Ran >= 200-5 Then Ran :=0;
  109.         If Y + Ran <= 0 Then Ran := 0;
  110.         Y := Y + Ran;
  111.  
  112.         Paint_BitMap(X,Y);
  113.         ShowVirtualScreen(Virtual_Screen^);
  114.         FlipScreens(Virtual_Screen1^,Virtual_Screen^);
  115.     Until(KeyPressed);
  116.     Dispose(Virtual_Screen);
  117.     Dispose(Virtual_Screen1);
  118.     SetTextMode;
  119. End.